Tobas Kretschmar contirbutes Enigma support, PocketFMS waypoints.
authorrobertl <robertl>
Sun, 28 Jun 2009 18:29:44 +0000 (18:29 +0000)
committerrobertl <robertl>
Sun, 28 Jun 2009 18:29:44 +0000 (18:29 +0000)
12 files changed:
Makefile.in
pocketfms_fp.c
reference/enigma-gpsb.ert [new file with mode: 0755]
reference/enigma-pfms.ert [new file with mode: 0755]
reference/enigma.gpx [new file with mode: 0755]
reference/pocketfms_fp.gpx
reference/pocketfms_wp.gpx [new file with mode: 0755]
reference/pocketfms_wp.txt [new file with mode: 0755]
testo
vecs.c
xmldoc/formats/enigma_wp.xml [new file with mode: 0755]
xmldoc/formats/pocketfms_wp.xml [new file with mode: 0755]

index f905aacba0bfd30629376b1356502e334d3f240f..b621f56c9b33debea45257a2b74011174da933d9 100644 (file)
@@ -61,8 +61,8 @@ ALL_FMTS=$(MINIMAL_FMTS) gtm.o gpsutil.o pcx.o cetus.o copilot.o \
        ggv_log.o g7towin.o garmin_gpi.o lmx.o random.o xol.o dg-100.o \
        navilink.o mtk_logger.o ik3d.o osm.o destinator.o exif.o vidaone.o \
        igo8.o gopal.o humminbird.o mapasia.o gnav_trl.o navitel.o ggv_ovl.o \
-       jtr.o sbp.o sbn.o mmo.o skyforce.o itracku.o v900.o \
-       pocketfms_bc.o pocketfms_fp.o naviguide.o delbin.o
+       jtr.o sbp.o sbn.o mmo.o skyforce.o itracku.o v900.o delbin.o \
+       pocketfms_bc.o pocketfms_fp.o pocketfms_wp.o naviguide.o enigma.o
 
 FMTS=@FMTS@
 
@@ -763,6 +763,8 @@ skyforce.o: skyforce.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
   zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h session.h strptime.h
 pocketfms_bc.o: pocketfms_bc.c defs.h gbtypes.h 
 pocketfms_fp.o: pocketfms_fp.c defs.h gbtypes.h 
+pocketfms_wp.o: pocketfms_wp.c defs.h gbtypes.h 
+enigma.o: enigma.c defs.h gbtypes.h
 smplrout.o: smplrout.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
   zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h session.h filterdefs.h \
   grtcirc.h
index 029a7a2c4abf87d31e5f2547a34c2a65ad13a61e..f67173686db2839153a7b1d167960c3cd03dabfc 100755 (executable)
 static int isFirst = 1;
 static route_head *route = NULL;
 static waypoint *wpt_to, *wpt_from;
+static double dest_altitude;
 
 #define MYNAME "PocketFMS FlightPlan"
 
-static xg_callback     wpt_s, wpt_from_lat, wpt_from_lon, wpt_from_name;
-static xg_callback     wpt_e, wpt_to_lat, wpt_to_lon, wpt_to_name, wpt_altitude;
+static xg_callback     wpt_s, wpt_from_lat, wpt_from_lon, wpt_from_name, wpt_from_elev;
+static xg_callback     wpt_e, wpt_to_lat, wpt_to_lon, wpt_to_name, wpt_to_elev, wpt_altitude;
 
 static xg_tag_mapping gl_map[] = {
  { wpt_s,                      cb_start, "/PocketFMSFlightplan/LIB" },
  { wpt_from_lat,       cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Latitude" },
  { wpt_from_lon,       cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Longitude" },
+ { wpt_from_elev,      cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Elevation" },
  { wpt_from_name,      cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/FriendlyShortname" },
  { wpt_to_lat,         cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Latitude" },
  { wpt_to_lon,         cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Longitude" },
  { wpt_to_name,                cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/FriendlyShortname" },
- { wpt_altitude,       cb_cdata, "/PocketFMSFlightplan/LIB/PlannedAltitude/@Value" },
+ { wpt_to_elev,                cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Elevation" },
+ { wpt_altitude,       cb_start, "/PocketFMSFlightplan/LIB/PlannedAltitude" },
  { wpt_e,                      cb_end,   "/PocketFMSFlightplan/LIB" },
  { NULL,                       0,              NULL}
 };
@@ -67,7 +70,10 @@ rd_deinit(void)
                        route->rte_name = xstrdup (head->shortname);
                route->rte_name = xstrappend(route->rte_name, " - ");
                if (tail != NULL)
+               {
                        route->rte_name = xstrappend(route->rte_name, tail->shortname);
+                       tail->altitude = dest_altitude;
+               }
        }
        xml_deinit();
 }
@@ -122,6 +128,12 @@ void       wpt_from_name(const char *args, const char **unused)
                wpt_from->shortname = xstrappend(wpt_from->shortname, args);
 }
 
+void   wpt_from_elev(const char *args, const char **unused)
+{
+       if (wpt_from != NULL)
+               wpt_from->altitude = FEET_TO_METERS(atof(args));
+}
+
 void   wpt_to_lat(const char *args, const char **unused)
 {
        wpt_to->latitude = atof(args);
@@ -137,9 +149,26 @@ void       wpt_to_name(const char *args, const char **unused)
        wpt_to->shortname = xstrappend(wpt_to->shortname, args);
 }
 
-void   wpt_altitude(const char *args, const char **unused)
+void   wpt_to_elev(const char *args, const char **unused)
 {
-       wpt_to->altitude = atof(args);
+       dest_altitude = FEET_TO_METERS(atof(args));
+}
+
+void   wpt_altitude(const char *args, const char **attrv)
+{
+       int isFeet = 0;
+       const char **avp = &attrv[0];
+    while (*avp) {
+        if (0 == strcmp(avp[0], "Value")) {
+                       wpt_to->altitude = atof(avp[1]);
+               }
+        if (0 == strcmp(avp[0], "Unit")) {
+                       isFeet = strcmp (avp[1], "ft") == 0 ? 1 : 0;
+               }
+               avp += 2;
+       }
+       if (isFeet)
+               wpt_to->altitude = FEET_TO_METERS(wpt_to->altitude);
 }
 
 ff_vecs_t pocketfms_fp_vecs = {
diff --git a/reference/enigma-gpsb.ert b/reference/enigma-gpsb.ert
new file mode 100755 (executable)
index 0000000..1b11dc6
Binary files /dev/null and b/reference/enigma-gpsb.ert differ
diff --git a/reference/enigma-pfms.ert b/reference/enigma-pfms.ert
new file mode 100755 (executable)
index 0000000..50ab8e0
Binary files /dev/null and b/reference/enigma-pfms.ert differ
diff --git a/reference/enigma.gpx b/reference/enigma.gpx
new file mode 100755 (executable)
index 0000000..e1348cc
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+  version="1.0"
+  creator="GPSBabel - http://www.gpsbabel.org"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns="http://www.topografix.com/GPX/1/0"
+  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="51.305278778" minlon="-9.523783684" maxlat="53.423606873" maxlon="4.390666485"/>
+<rte>
+  <rtept lat="52.180873871" lon="-9.523783684">
+    <ele>34.137600</ele>
+    <name>EIKY</name>
+    <cmt>KERRY</cmt>
+    <desc>KERRY</desc>
+  </rtept>
+  <rtept lat="52.701972961" lon="-8.924821854">
+    <ele>14.020800</ele>
+    <name>EINN</name>
+    <cmt>SHANNON</cmt>
+    <desc>SHANNON</desc>
+  </rtept>
+  <rtept lat="53.423606873" lon="-6.302777767">
+    <name>DAP(EI</name>
+    <cmt>DUBLIN</cmt>
+    <desc>DUBLIN</desc>
+  </rtept>
+  <rtept lat="51.305278778" lon="4.390666485">
+    <ele>3.048000</ele>
+    <name>EBHN</name>
+    <cmt>Hoevenen</cmt>
+    <desc>Hoevenen</desc>
+  </rtept>
+</rte>
+</gpx>
index e2e054295e448513a34824ff7bb70d81eced0306..0c72b8d834feb211b9d73cb5b85a5ffeb61e4e5c 100755 (executable)
@@ -8,21 +8,25 @@
 <time>1970-01-01T00:00:00Z</time>
 <bounds minlat="51.158882000" minlon="14.902600000" maxlat="51.363167000" maxlon="14.952033000"/>
 <wpt lat="51.158882000" lon="14.950277000">
+  <ele>237.134400</ele>
   <name>EDBX</name>
   <cmt>EDBX</cmt>
   <desc>EDBX</desc>
 </wpt>
 <wpt lat="51.302700000" lon="14.902600000">
+  <ele>609.600000</ele>
   <name>Horka,NOL(GM)</name>
   <cmt>Horka,NOL(GM)</cmt>
   <desc>Horka,NOL(GM)</desc>
 </wpt>
 <wpt lat="51.343624000" lon="14.952033000">
+  <ele>609.600000</ele>
   <name>RO(EDBR)-N</name>
   <cmt>RO(EDBR)-N</cmt>
   <desc>RO(EDBR)-N</desc>
 </wpt>
 <wpt lat="51.363167000" lon="14.950000000">
+  <ele>609.600000</ele>
   <name>EDBR</name>
   <cmt>EDBR</cmt>
   <desc>EDBR</desc>
   <name>EDBX - EDBR</name>
   <desc>PocketFMS flightplan</desc>
   <rtept lat="51.158882000" lon="14.950277000">
+    <ele>237.134400</ele>
     <name>EDBX</name>
   </rtept>
   <rtept lat="51.302700000" lon="14.902600000">
+    <ele>609.600000</ele>
     <name>Horka,NOL(GM)</name>
   </rtept>
   <rtept lat="51.343624000" lon="14.952033000">
+    <ele>609.600000</ele>
     <name>RO(EDBR)-N</name>
   </rtept>
   <rtept lat="51.363167000" lon="14.950000000">
+    <ele>157.581600</ele>
     <name>EDBR</name>
   </rtept>
 </rte>
diff --git a/reference/pocketfms_wp.gpx b/reference/pocketfms_wp.gpx
new file mode 100755 (executable)
index 0000000..ec2b8c7
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+  version="1.0"
+  creator="GPSBabel - http://www.gpsbabel.org"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns="http://www.topografix.com/GPX/1/0"
+  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="51.158882000" minlon="14.902600000" maxlat="51.363167000" maxlon="14.952033000"/>
+<wpt lat="51.158882000" lon="14.950277000">
+  <name>EDBX </name>
+  <cmt>EDBX </cmt>
+  <desc>EDBX </desc>
+</wpt>
+<wpt lat="51.302700000" lon="14.902600000">
+  <name>Horka,NOL(GM) </name>
+  <cmt>Horka,NOL(GM) </cmt>
+  <desc>Horka,NOL(GM) </desc>
+</wpt>
+<wpt lat="51.343624000" lon="14.952033000">
+  <name>RO(EDBR)-N </name>
+  <cmt>RO(EDBR)-N </cmt>
+  <desc>RO(EDBR)-N </desc>
+</wpt>
+<wpt lat="51.363167000" lon="14.950000000">
+  <name>EDBR </name>
+  <cmt>EDBR </cmt>
+  <desc>EDBR </desc>
+</wpt>
+</gpx>
diff --git a/reference/pocketfms_wp.txt b/reference/pocketfms_wp.txt
new file mode 100755 (executable)
index 0000000..fe1bc75
--- /dev/null
@@ -0,0 +1,4 @@
+EDBX 51.158882 14.950277
+Horka,NOL(GM) 51.302700 14.902600
+RO(EDBR)-N 51.343624 14.952033
+EDBR 51.363167 14.950000
diff --git a/testo b/testo
index 939bac3bca724068e0640befbad47da88d41c43a..2a2ec85afdb0fefe5791ac8b845f1d7798660223 100755 (executable)
--- a/testo
+++ b/testo
@@ -1580,7 +1580,7 @@ compare ${REFERENCE}/skyforce.gpx ${TMPDIR}/skyforce.gpx
 
 #
 # PocketFMS breadcrumb files
-#${TMPDIR}
+#
 gpsbabel -i pocketfms_bc -f ${REFERENCE}/pocketfms_bc -o gpx -F ${TMPDIR}/pocketfms_bc.gpx
 compare ${REFERENCE}/pocketfms_bc.gpx ${TMPDIR}/pocketfms_bc.gpx
 gpsbabel -i gpx -f ${REFERENCE}/pocketfms_bc.gpx -o pocketfms_bc -F ${TMPDIR}/pocketfms_bc
@@ -1592,6 +1592,22 @@ bincompare ${REFERENCE}/pocketfms_bc.babel ${TMPDIR}/pocketfms_bc
 gpsbabel -i pocketfms_fp -f ${REFERENCE}/pocketfms_fp.xml -o gpx -F ${TMPDIR}/pocketfms_fp.gpx
 compare ${REFERENCE}/pocketfms_fp.gpx ${TMPDIR}/pocketfms_fp.gpx
 
+#
+# PocketFMS waypoints file (.txt)
+#
+gpsbabel -i gpx -f ${REFERENCE}/pocketfms_fp.gpx -o pocketfms_wp -F ${TMPDIR}/pocketfms_wp.txt
+compare ${REFERENCE}/pocketfms_wp.txt ${TMPDIR}/pocketfms_wp.txt
+gpsbabel -i pocketfms_wp -f ${REFERENCE}/pocketfms_wp.txt -o gpx -F ${TMPDIR}/pocketfms_wp.gpx
+compare ${REFERENCE}/pocketfms_wp.gpx ${TMPDIR}/pocketfms_wp.gpx
+
+#
+# MGL Enigma route file (.ert)
+#
+gpsbabel -i gpx -f ${REFERENCE}/enigma.gpx -o enigma -F ${TMPDIR}/enigma.ert
+compare ${REFERENCE}/enigma-gpsb.ert ${TMPDIR}/enigma.ert
+gpsbabel -i enigma -f ${REFERENCE}/enigma-pfms.ert -o gpx -F ${TMPDIR}/enigma.gpx
+compare ${REFERENCE}/enigma.gpx ${TMPDIR}/enigma.gpx
+
 #
 # Columbus/Visiontac V900 "binary" csv files
 #
diff --git a/vecs.c b/vecs.c
index 7d369e1bf316cfea7378d6890c159aee05336823..d9a0fafb1c70bc484ac21ed1107282d2363e7c51 100644 (file)
--- a/vecs.c
+++ b/vecs.c
@@ -161,6 +161,8 @@ extern ff_vecs_t skyforce_vecs;
 extern ff_vecs_t v900_vecs;
 extern ff_vecs_t pocketfms_bc_vecs;
 extern ff_vecs_t pocketfms_fp_vecs;
+extern ff_vecs_t pocketfms_wp_vecs;
+extern ff_vecs_t enigma_vecs;
 
 static
 vecs_t vec_list[] = {
@@ -912,8 +914,14 @@ vecs_t vec_list[] = {
         {
                &pocketfms_fp_vecs,
                "pocketfms_fp",
-               "PocketFMS flightplan",
-               NULL
+               "PocketFMS flightplan (.xml)",
+               "xml"
+        },
+        {
+               &pocketfms_wp_vecs,
+               "pocketfms_wp",
+               "PocketFMS waypoints (.txt)",
+               "txt"
         },
         {
                &v900_vecs,
@@ -927,6 +935,12 @@ vecs_t vec_list[] = {
                "Naviguide binary route file (.twl)",
                "twl"
         },
+        {
+               &enigma_vecs,
+               "enigma",
+               "Enigma binary waypoint file (.ert)",
+               "ert"
+        },
        {
                &delbin_vecs, 
                "delbin",
diff --git a/xmldoc/formats/enigma_wp.xml b/xmldoc/formats/enigma_wp.xml
new file mode 100755 (executable)
index 0000000..4adcb9d
--- /dev/null
@@ -0,0 +1,6 @@
+<para>\r
+   The <ulink url="http://www.mglavionics.co.za/">MGL Avionics</ulink> format holds waypoints or routes. These routes can be loaded by the MGL Stratomaster Enigma EFIS series (Enigma, Odyssey, Voyager, Explorer).  \r
+</para>\r
+<para>\r
+    The format is designed for microcontrollers. The use is free for any none military application. You can find a detailed description in the <ulink url="http://www.mglavionics.co.za/Docs/Enigma%20Waypoint%20format.pdf">MGL Documentation</ulink>.\r
+</para>\r
diff --git a/xmldoc/formats/pocketfms_wp.xml b/xmldoc/formats/pocketfms_wp.xml
new file mode 100755 (executable)
index 0000000..0f49052
--- /dev/null
@@ -0,0 +1,6 @@
+<para>\r
+   This format provides support for the <ulink url="www.pocketfms.com">PocketFMS</ulink> user waypoints text file. \r
+</para>\r
+<para>\r
+   PocketFMS waypoint text files contain one waypoint per line. Any waypoint has name, latitude and longitude, separated by space. Latitude and longitude are either decimal degrees or degrees°minutes'seconds'' triples. For details see the PocketFMS help file. You can also visit the very friendly <ulink url="http://www.pocketfms.com/phpBB3/">PocketFMS forum</ulink>. \r
+</para>\r